package com.jiangyao.controller;


import com.jiangyao.common.ApiResult;
import com.jiangyao.common.utils.JsonUtil;
import com.jiangyao.model.dto.backend.ClassInfoDTO;
import com.jiangyao.model.dto.backend.ClassInfoListPageDTO;
import com.jiangyao.model.vo.backend.ClassInfoListVO;
import com.jiangyao.model.vo.backend.ClassInfoVO;
import com.jiangyao.service.ClassInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;

/**
 * <p>
 * 班级信息 前端控制器
 * </p>
 *
 * @author yangyongchaun
 * @since 2020-08-16
 */
@RestController
@RequestMapping("/classInfo")
@Api(tags = "班级管理")
public class ClassInfoController extends BaseController {

	@Autowired
	private ClassInfoService classInfoService;

	/**
	 * 获取班级列表
	 *
	 * @param listPageDTO 列表DTO
	 * @return 结果
	 */
	@ApiOperation(value = "获取班级列表")
	@PostMapping("/list")
	public ApiResult<ClassInfoListVO> getListPage(@Validated({ClassInfoListPageDTO.ListPage.class}) @RequestBody ClassInfoListPageDTO listPageDTO) {
		return ApiResult.success(classInfoService.getListPage(listPageDTO));
	}

	/**
	 * 增加班级
	 *
	 * @param classInfoDTO 增加DTO
	 * @return 结果
	 */
	@ApiOperation(value = "增加班级")
	@PostMapping("/add")
	public ApiResult<String> add(@Validated({ClassInfoDTO.Add.class}) @RequestBody ClassInfoDTO classInfoDTO) {
		classInfoService.add(classInfoDTO);
		return new ApiResult<>("ok");
	}

	/**
	 * 编辑班级
	 *
	 * @param classInfoDTO 编辑DTO
	 * @return 结果
	 */
	@ApiOperation(value = "编辑班级")
	@PostMapping("/edit")
	public ApiResult<String> edit(@Validated({ClassInfoDTO.Edit.class}) @RequestBody ClassInfoDTO classInfoDTO) {
		classInfoService.edit(classInfoDTO);
		return new ApiResult<>("ok");
	}

	/**
	 * 编辑班级状态（启用、禁用）
	 *
	 * @param classInfoDTO 编辑DTO
	 * @return 结果
	 */
	@ApiOperation(value = "编辑班级状态（启用、禁用）", notes = "必填字段：orgIdList、status")
	@PostMapping("/editStatus")
	public ApiResult<String> editStatus(@Validated({ClassInfoDTO.Delete.class}) @RequestBody ClassInfoDTO classInfoDTO) {
		classInfoService.editStatus(classInfoDTO);
		return new ApiResult<>("ok");
	}


	/**
	 * 获取班级详情
	 *
	 * @param classInfoDTO 请求DTO
	 * @return 结果
	 */
	@ApiOperation(value = "获取班级详情", notes = "必填字段：classId")
	@PostMapping("/detail")
	public ApiResult<ClassInfoVO> detail(@Validated({ClassInfoDTO.Detail.class}) @RequestBody ClassInfoDTO classInfoDTO) {
		return new ApiResult<>(classInfoService.getDetail(classInfoDTO));
	}

	/**
	 * 导出班级
	 *
	 * @param response    response
	 * @param listPageDTO 列表请求DTO json字符串
	 */
	@ApiOperation(value = "导出班级", notes = "列表请求参数DTO转化为json字符串,json字符串还需要URL编码")
	@ApiImplicitParam(name = "listPageDTO", value = "列表请求DTO json字符串", required = true)
	@GetMapping("/export")
	public void export(HttpServletResponse response, @RequestParam String listPageDTO) {
		ClassInfoListPageDTO classInfoListPageDTO = JsonUtil.parse(listPageDTO, ClassInfoListPageDTO.class);
		classInfoService.export(response, classInfoListPageDTO);
	}

}

